package com.pack.RedisTest;

import java.util.List;
import java.util.Map;
import java.util.Set;

import redis.clients.jedis.Jedis;

/**
 * redis基本操作来一波
 */
public class RedisTest {
        public static void main(String[] args) {


            //连接本地的 Redis 服务
            Jedis jedis = new Jedis("localhost");
            System.out.println("连接成功");
            //list 操作
            //lpush命令，存储数据到列表中
            jedis.lpush("site-list", "Runoob");
            jedis.lpush("site-list", "Google");
            jedis.lpush("site-list", "Taobao");


            // lpop 移除并获取列表的第一个元素
            String ame =   jedis.lpop("site-list");
            System.out.println(ame);

            //lset给名称为key的list中index位置元素赋值
            jedis.lset("site-list",0,"Yahoo");

            // ltrim(key, start, end)：截取名称为key的list
            String lst = jedis.ltrim("site-list",0,3);
            System.out.println(lst);

            //llen(key)返回名称为key的list的长度
            Long size = jedis.llen("site-list");
            System.out.println("大小: "+size);

            //lrange(key, start, end)：返回名称为key的list中start至end之间的元素
            List<String> list = jedis.lrange("site-list", 0 ,100);
            for(int i=0; i<list.size(); i++) {
                System.out.println("列表项为: "+list.get(i));
            }

            //String操作
              //setnx(key, value)：添加string，名称为key，值为value
              jedis.setnx("px","xp");

              //set(key, value)：给数据库中名称为key的string赋予值value
              jedis.set("pxxx","xxxxp");

              //mget(key1, key2,…, key N)：返回库中多个string的value
              //setex(key, time, value)：向库中添加string，设定过期时间time
              //mset(key N, value N)：批量设置多个string的值
              //msetnx(key N, value N)：如果所有名称为key i的string都不存在
              //substr(key, start, end)：返回名称为key的string的value的子串

            //get(key)：返回数据库中名称为key的string的value
            String px = jedis.get("px");
            String pxxx = jedis.get("pxxx");
            System.out.println(pxxx);
            System.out.println(px);


            //set 操作


//            sadd(key, member)：向名称为key的set中添加元素member
            jedis.sadd("site","go");
            jedis.sadd("site","goomg");
            jedis.sadd("site","goSan");

//            srem(key, member) ：删除名称为key的set中的元素member
//            spop(key) ：随机返回并删除名称为key的set中一个元素
//            smove(srckey, dstkey, member) ：移到集合元素
//            scard(key) ：返回名称为key的set的基数
            Long si = jedis.scard("site");
            System.out.println(si);
//            sismember(key, member) ：member是否是名称为key的set的元素
            Boolean contain = jedis.sismember("site","ss");
            System.out.println(contain);

//            sinter(key1, key2,…key N) ：求交集
//            sinterstore(dstkey, (keys)) ：求交集并将交集保存到dstkey的集合
//            sunion(key1, (keys)) ：求并集
//            sunionstore(dstkey, (keys)) ：求并集并将并集保存到dstkey的集合
//            sdiff(key1, (keys)) ：求差集
//            sdiffstore(dstkey, (keys)) ：求差集并将差集保存到dstkey的集合
//            smembers(key) ：返回名称为key的set的所有元素
//            srandmember(key) ：随机返回名称为key的set的一个元素


//            Hash
//            hset(key, field, value)：向名称为key的hash中添加元素field
            jedis.hset("student","age","15-18");
            jedis.hset("student","name","small");
            jedis.hset("student","class","nine");

//            hget(key, field)：返回名称为key的hash中field对应的value
//            hmget(key, (fields))：返回名称为key的hash中field i对应的value
            List<String> age = jedis.hmget("student","age");
            for (String s : age) {
                System.out.println(s);
            }
//            hmset(key, (fields))：向名称为key的hash中添加元素field
//            hincrby(key, field, integer)：将名称为key的hash中field的value增加integer
//            hexists(key, field)：名称为key的hash中是否存在键为field的域
//            hdel(key, field)：删除名称为key的hash中键为field的域
//            hlen(key)：返回名称为key的hash中元素个数
            Long lo = jedis.hlen("student");
            System.out.println("size::  "+lo);
//            hkeys(key)：返回名称为key的hash中所有键
            Set<String> keys = jedis.hkeys("student");
            for(String s:keys){
                System.out.println("keys:: "+s);
            }
//            hvals(key)：返回名称为key的hash中所有键对应的value
//            hgetall(key)：返回名称为key的hash中所有的键（field）及其对应的value
            Map<String,String> map =  jedis.hgetAll("student");
            for (String s :map.keySet()) {
                System.out.println(s+":::  "+map.get(s));
            }

//            对value操作的命令
//            exists(key)：确认一个key是否存在
            Boolean exist = jedis.exists("student");
            System.out.println(exist);
//            del(key)：删除一个key
//            type(key)：返回值的类型
            String ty = jedis.type("student");
            System.out.println(ty);
//            keys(pattern)：返回满足给定pattern的所有key
//            randomkey：随机返回key空间的一个
//            keyrename(oldname, newname)：重命名key
//            dbsize：返回当前数据库中key的数目
//            expire：设定一个key的活动时间（s）
//            ttl：获得一个key的活动时间
//            select(index)：按索引查询
//            move(key, dbindex)：移动当前数据库中的key到dbindex数据库
//            flushdb：删除当前选择数据库中的所有key
//            flushall：删除所有数据库中的所有key

        }
}
